#include <iostream>
#include <queue>

// 两个队列实现一个栈
// 两个队列只有一个队列有数据
class MyStack
{
public:
    MyStack() {};
    void Push(int value)
    {
        if (q1.empty() == false)
        {
            q1.push(value);
        }
        else
            q2.push(value);
    }
    void Pop()
    {
        if (q1.empty() == false)
        {
            while (q1.size() != 1)
            {
                q2.push(q1.front());
                q1.pop();
            }
            q1.pop();
        }
        else
        {
            while (q2.size() != 1)
            {
                q1.push(q2.front());
                q2.pop();
            }
            q2.pop();
        }
    }
    int GetTop()
    {
        int result = 0;
        if (q1.empty() == false)
        {
            while (q1.size() != 1)
            {
                q2.push(q1.front());
                q1.pop();
            }
            // q1是空的，q2是满的
            result = q1.front();
            q2.push(result);
            q1.pop();
            return result;
        }
        else
        {
            while (q2.size() != 1)
            {
                q1.push(q2.front());
                q2.pop();
            }
            // q1是空的，q2是满的
            result = q2.front();
            q1.push(result);
            q2.pop();
            return result;
        }
    }

    bool IsEmpty()
    {
        return q1.empty() && q2.empty();
    }

private:
    std::queue<int> q1;
    std::queue<int> q2;
};

int main()
{
    MyStack s;
    s.Push(1);
    s.Push(2);
    s.Push(3);
    // std::cout << s.GetTop() << std::endl;

    while (!s.IsEmpty())
    {
        std::cout << s.GetTop() << " ";
        s.Pop();
    }
    std::cout << std::endl;

    return 0;
}